package com.lcj.hub.db;

import com.mybatisflex.codegen.Generator;
import com.mybatisflex.codegen.config.GlobalConfig;
import com.zaxxer.hikari.HikariDataSource;

public class CodegenUtils {

        public static void main(String[] args) {
            //配置数据源
            HikariDataSource dataSource = new HikariDataSource();
            dataSource.setJdbcUrl("jdbc:postgresql://localhost:15432/school");
            dataSource.setUsername("postgres");
            dataSource.setPassword("admin123");

            //创建配置内容，引用下方的代码生成器方式方法
            GlobalConfig globalConfig = createGlobalConfigUseStyle1();

            //通过 datasource 和 globalConfig 创建代码生成器
            Generator generator = new Generator(dataSource, globalConfig);

            //生成代码
            generator.generate();
        }


    /**
     * 代码生成器方式方法
     *
     * @return
     */
    public static GlobalConfig createGlobalConfigUseStyle1() {
        //创建配置内容
        GlobalConfig globalConfig = new GlobalConfig();

        //设置根包
        globalConfig.setBasePackage("com.lcj.hub.db");

        //文档注释 作者名
//            globalConfig.getJavadocConfig().setAuthor("lcj");
        //启用swagger注解
//            globalConfig.setEntityWithSwagger(true);
        //设置表前缀和只生成哪些表
        //        globalConfig.setTablePrefix("sys_");
        globalConfig.setGenerateTable("classes",
                "courses",
                "grades",
                "students",
                "teachers");

        //设置生成 entity 并启用 Lombok
        globalConfig.setEntityGenerateEnable(true);
        globalConfig.setEntityWithLombok(true);

        //设置项目的JDK版本，项目的JDK为14及以上时建议设置该项，小于14则可以不设置
        globalConfig.setEntityJdkVersion(17);

        //启用 Controller 生成
        globalConfig.enableController();
        //启用 Service 生成
        globalConfig.enableService();
        //启用 ServiceImpl 生成
        globalConfig.enableServiceImpl();
        //设置生成 mapper
        globalConfig.enableMapper();
        //启用 MapperXml 生成
        globalConfig.enableMapperXml();
        //	启用 TableDef 生成
        globalConfig.enableTableDef();
        //不设置会重复类
        globalConfig.getTableDefConfig()
                .setClassPrefix("My")
                .setClassSuffix("Def");

        //可以单独配置某个列
        //ColumnConfig columnConfig = new ColumnConfig();
        //columnConfig.setColumnName("tenant_id");
        //columnConfig.setLarge(true);
        //columnConfig.setVersion(true);
        //globalConfig.setColumnConfig("tb_account", columnConfig);
        return globalConfig;
    }
}